package com.fjec.base.service;

import com.fjec.base.entity.SysAnnex;
import com.baomidou.mybatisplus.extension.service.IService;
import com.fjec.base.view.AnnexVO;
import com.fjec.common.protocol.JsonResult;
import com.fjec.common.view.AnnexBizItem;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;


/**
 * <p>
 * 001.附件表 服务类
 * </p>
 *
 * @author admin
 * @since 2020-08-31
 */
public interface ISysAnnexService extends IService<SysAnnex> {

    /**
     * 上传文件到fjstore
     *
     * @param file
     * @param bizType
     * @return
     */
    JsonResult storeFileUpload(MultipartFile file, Integer bizType) throws Exception;

    /**
     * 上传文件到fjsecret
     *
     * @param file
     * @param bizType
     * @return
     */
    JsonResult secretFileUpload(MultipartFile file, Integer bizType) throws Exception;

    /**
     * 上传文件base64到fjstore
     *
     * @param file
     * @param fileName
     * @param bizType
     * @return
     */
    JsonResult storeBase64FileUpload(String file, String fileName, Integer bizType, Integer delFlag) throws Exception;

    /**
     * 上传文件base64到fjsecret
     *
     * @param file
     * @param fileName
     * @param bizType
     * @return
     */
    JsonResult secretBase64FileUpload(String file, String fileName, Integer bizType, Integer delFlag) throws Exception;

    /**
     * 上传文件base64到fjstore
     *
     * @param file
     * @param fileName
     * @param bizType
     * @param bizId
     * @param bizCode
     * @param delFlag
     * @return
     * @throws Exception
     */
    Map<String, Object> rpcStoreBase64FileUpload(String file, String fileName, Integer bizType, Long bizId, Integer bizCode, Integer delFlag) throws Exception;

    /**
     * 上传文件base64到fjsecret
     *
     * @param file
     * @param fileName
     * @param bizType
     * @param bizId
     * @param bizCode
     * @param delFlag
     * @return
     * @throws Exception
     */
    Map<String, Object> rpcSecretBase64FileUpload(String file, String fileName, Integer bizType, Long bizId, Integer bizCode, Integer delFlag) throws Exception;

    /**
     * 更新文件数据
     *
     * @param id
     * @param bizId
     * @param bizType
     * @param bizCode
     * @param sort
     * @return
     */
    JsonResult updateData(Long id, Long bizId, Integer bizType, Integer bizCode, Integer sort);


    /**
     * 逻辑删除文件
     *
     * @param id
     * @return
     */
    JsonResult logicDelete(Long id);

    /**
     * 根据业务逻辑获取附件信息
     *
     * @param bizType 业务类型
     * @param bizId   业务Id
     * @param bizCode 业务自定义Code
     * @return
     */
    List<AnnexVO> getAnnex(Integer bizType, Long bizId, Integer bizCode) throws Exception;

    /**
     * 获取fjsecret下文件
     *
     * @param id
     * @param res
     */
    void getSecretOSSFile(Long id, HttpServletResponse res) throws Exception;

    /**
     * 获取fjsecret下文件，并转换为base64字符串，如果有多个获取第一个
     *
     * @param bizId
     * @param bizType
     * @return
     * @throws Exception
     */
    String getOneSecretOSSFileBase64(Long bizId, Integer bizType);

    /**
     * 更新附件为可用
     *
     * @param itemList
     * @return
     */
    int setAnnexAvailable(List<AnnexBizItem> itemList);

    /**
     * 查询需要删除的附件列表
     *
     * @param limit
     * @param days
     * @return
     */
    List<SysAnnex> getAnnexForDelete(int limit, int days);

    /**
     * 物理删除附件数据
     *
     * @param entity
     */
    void physicalDeleteAnnex(SysAnnex entity);

    /**
     * 根据Id获取文件Base64
     *
     * @param id
     * @return
     * @throws Exception
     */
    String getOSSFileBase64ById(Long id);

    /**
     * 根据Id获取文件Base64,带文件信息
     *
     * @param id
     * @return
     */
    Map<String, Object> getOSSFileBase64ByIdMap(Long id);
}
